package org.dppc.fine4j.proxychain;

import java.util.Collection;
import java.util.Comparator;

import org.dppc.fine4j.proxychain.support.TypeErrorException;


/**
 * 代理句柄
 * 
 * @author maomh
 *
 */
/**
 * @author maomh
 *
 * @param <T>
 */
public interface ProxyHandler {
	
	/**
	 * 获取代理对象
	 * 
	 * @return
	 */
	<T> T getProxy();
	
	/**
	 * 设置代理目标对象
	 * 
	 * @return
	 */
	void setTarget(Object target) throws TypeErrorException;
	
	/**
	 * 获取代理目标对象
	 * 
	 * @return
	 */
	<T> T getTarget();
	
	
	/**
	 * 添加MethodProxy
	 * 
	 * @param methodProxies
	 */
	void addMethodProxy(Collection<MethodProxy> methodProxies);
	
	
	/**
	 * 添加MethodProxy
	 * 
	 * @param methodProxies
	 */
	void addMethodProxy(MethodProxy...methodProxies);
	
	
	/**
	 * 清空方法代理链
	 */
	void clearAllMethodProxy();
	
	
	/**
	 * 按照指定的排序规则对方法代理链进行排序
	 * 
	 * @param comparator
	 */
	void sortMethodProxies(Comparator<MethodProxy> comparator);
	
	
	/**
	 * 获取所有的方法代理
	 * 
	 * @return
	 */
	MethodProxy[] getAllMethodProxy();
}
